package com.treeroot.tk_mybatis.controller;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.treeroot.tk_mybatis.entity.User;
import com.treeroot.tk_mybatis.service.UserService;
import org.apache.ibatis.session.RowBounds;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @Author : JCccc
 * @CreateTime : 2020/8/13
 * @Description :
 **/
@RestController
public class UserController {

    @Resource
    private UserService userService;


    /**
     * 获取所有 分页 PageHelper
     * PageInfo 类不需要手动关闭，因为它只是对分页查询结果的一个封装，不持有数据库连接等资源。
     * 只有使用 PageHelper.startPage 方法时才需要对 Page 对象进行手动关闭
     * 通过使用 try-with-resources 语句，可以确保资源得到正确的释放，避免了潜在的资源泄漏问题，并提高了代码的可靠性和健壮性。
     */
//    @GetMapping("getAllByPage")
//    public PageInfo<User> getAllByPageHelp() {
//        try (Page<Object> page = PageHelper.startPage(1, 2)) {
//            List<User> userList = userService.selectAll();
//            return new PageInfo<User>(userList);
//        }
//    }

    /**
     * 新增
     *
     * @return
     */
    @PostMapping("addOne")
    public int addOne() {
        User user = new User();
        user.setName("jc");
        user.setAge(10);
        return userService.insert(user);
    }

    /**
     * 获取所有 分页
     *
     * @return
     */
    @GetMapping("getAllByPage")
    public List<User> getAllByPage() {
        RowBounds rowBounds = new RowBounds(0, 3);
        return userService.selectByRowBounds(new User(), rowBounds);
    }

    /**
     * 获取某个
     *
     * @return
     */
    @GetMapping("getOne")
    public User getOne() {
        User user = new User();
        user.setId(1);
        return userService.selectOne(user);
    }

    /**
     * 获取所有
     *
     * @return
     */
    @GetMapping("getAll")
    public List<User> getAll() {

        return userService.selectAll();
    }

    /**
     * 修改
     *
     * @return
     */
    @GetMapping("updateOne")
    public int updateOne() {
        User user = new User();
        user.setId(1);
        user.setName("TG");
        return userService.updateByPrimaryKeySelective(user);
    }


    /**
     * 额外扩展的
     *
     * @return
     */
    @GetMapping("getMyCustom")
    public List<Map> getMyCustom() {
        return userService.getMyCustom(1);
    }

}